package com.sheng.leetcode.year2022.month09.day07;

import org.junit.Test;

/**
 * @author liusheng
 * @date 2022/09/07
 *
 * 1592. 重新排列单词间的空格
 *
 * 给你一个字符串 text ，该字符串由若干被空格包围的单词组成。每个单词由一个或者多个小写英文字母组成，并且两个单词之间至少存在一个空格。
 * 题目测试用例保证 text 至少包含一个单词 。
 * 请你重新排列空格，使每对相邻单词之间的空格数目都 相等 ，并尽可能 最大化 该数目。
 * 如果不能重新平均分配所有空格，请 将多余的空格放置在字符串末尾 ，这也意味着返回的字符串应当与原 text 字符串的长度相等。
 * 返回 重新排列空格后的字符串 。
 *
 * 示例 1：
 * 输入：text = "  this   is  a sentence "
 * 输出："this   is   a   sentence"
 * 解释：总共有 9 个空格和 4 个单词。可以将 9 个空格平均分配到相邻单词之间，相邻单词间空格数为：9 / (4-1) = 3 个。
 *
 * 示例 2：
 * 输入：text = " practice   makes   perfect"
 * 输出："practice   makes   perfect "
 * 解释：总共有 7 个空格和 3 个单词。7 / (3-1) = 3 个空格加上 1 个多余的空格。多余的空格需要放在字符串的末尾。
 *
 * 示例 3：
 * 输入：text = "hello   world"
 * 输出："hello   world"
 *
 * 示例 4：
 * 输入：text = "  walks  udp package   into  bar a"
 * 输出："walks  udp  package  into  bar  a "
 *
 * 示例 5：
 * 输入：text = "a"
 * 输出："a"
 *
 * 提示：
 *
 * 1 <= text.length <= 100
 * text 由小写英文字母和 ' ' 组成
 * text 中至少包含一个单词
 *
 * 来源：力扣（LeetCode）
 * 链接：https://leetcode.cn/problems/rearrange-spaces-between-words
 * 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 */
public class LeetCode1592 {

    @Test
    public void test01() {
//        String text = "  this   is  a sentence ";
//        String text = " practice   makes   perfect";
//        String text = "hello   world";
        String text = "  walks  udp package   into  bar a";
//        String text = "a";
        System.out.println(new Solution().reorderSpaces(text));
    }
}
class Solution {
    public String reorderSpaces(String text) {
        StringBuilder str = new StringBuilder("");
        // 去除字符串的头尾空白后，进行切割，匹配正则表达式
        String[] split = text.trim().split("\\s+");
        int length = split.length;
        // 单词的长度
        int count = 0;
        for (String s : split) {
            count += s.length();
        }
        // 重新排序后单词之间空格的数量
        // 多余空格的数量
        int connect = 0;
        int suffix = 0;
        if (length > 1) {
            connect = (text.length() - count) / (length - 1);
            suffix = (text.length() - count) % (length - 1);
        } else {
            suffix = text.length() - count;
        }
        for (int i = 0; i < length; i++) {
            str.append(split[i]);
            int index = connect;
            while (index > 0 && i != length - 1) {
                str.append(" ");
                index--;
            }
        }
        // 将多余的空格加到字符串后面
        while (suffix > 0) {
            str.append(" ");
            suffix--;
        }
        return str.toString();
    }
}
